﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocio.readOnly;
using negocio.servicios;
using negocio.entidades;
namespace web.form
{
    public partial class Productos : System.Web.UI.Page
    {
        private readonly ProductoService prodService = new ProductoService();

        protected void Page_Load(object sender, EventArgs e)
        {


            if (!Page.IsPostBack)
            {
                pnlGrilla.Visible = true;
                pnlFormulario.Visible = false;
                CargarGrilla();
                cargarCombos();
            }
        }


        protected void cmd_filtrar_Click(object sender, EventArgs e)
        {
            bool Conbajas = false;
            if (chk_CampoBaja.Checked == true)
                Conbajas = true;

            string filtro = txt_filtro.Text;
            List<ProductoReadOnly> productos = prodService.buscar(filtro, Conbajas);
            grdProductos.DataSource = productos;
            string[] keys = new string[1];
            keys[0] = "ID";
            grdProductos.DataKeyNames = keys;
            grdProductos.DataBind();
        }

        protected void cmd_agregar_Click(object sender, EventArgs e)
        {
            hEstado.Value = "agregar";
            pnlFormulario.Visible = true;
            pnlGrilla.Visible = false;
            limpiarCampos();
            habilitarCampos();
  
        }

        protected void cmd_editar_Click(object sender, EventArgs e)
        {
            hEstado.Value = "editar";
            ProductoService prodS = new ProductoService();
            if (grdProductos.SelectedDataKey != null)
            {
                pnlFormulario.Visible = true;
                pnlGrilla.Visible = false;
                Producto p = new Producto();
                p = prodS.ontenerProductoPorId(int.Parse(grdProductos.SelectedDataKey.Value.ToString()));
                MapProductoToForm(p);
                habilitarCampos();
            }
            else
            {
                Show("No se ha seleccionado ningun producto para editar.");
            }
 

        }

        protected void cmd_ver_Click(object sender, EventArgs e)
        {
            ProductoService prodS = new ProductoService();
            if (grdProductos.SelectedDataKey != null)
            {
                pnlFormulario.Visible = true;
                pnlGrilla.Visible = false;
                Producto p = new Producto();
                p = prodS.ontenerProductoPorId(int.Parse(grdProductos.SelectedDataKey.Value.ToString()));
                MapProductoToForm(p);
                deshabilitarCampos();
            }
            else
            {
                Show("No se ha seleccionado ningun producto para ver.");
            }
 
        }

        protected void cmd_eliminar_Click(object sender, EventArgs e)
        {
            if (grdProductos.SelectedDataKey != null)
            {
                ProductoService prodS = new ProductoService();
                Producto p = prodS.ontenerProductoPorId(int.Parse(grdProductos.SelectedDataKey.Value.ToString()));
                prodS.Eliminar(p);

                CargarGrilla();
                //pnlFormulario.Visible = true;
                //pnlGrilla.Visible = false;
                //ProductoService prodS = new ProductoService();
                //Producto p = new Producto();
                
                //MapProductoToForm(p);
                //deshabilitarCampos();
                //cmd_ConfirmEliminar.Visible = true;
                //cmd_Guardar.Visible = false;
            }
            else
            {
                Show("No se ha seleccionado ningun producto para eliminar.");
            }

        }



        protected void cmd_Guardar_Click(object sender, EventArgs e)
        {
            pnlFormulario.Visible = false;
            pnlGrilla.Visible = true;
            Guardar();

            CargarGrilla();
        }

        protected void cmd_ConfirmEliminar_Click(object sender, EventArgs e)
        {
            ProductoService prodS = new ProductoService();
            if (grdProductos.SelectedDataKey != null)
            {
                prodS.Eliminar(MapFormToProducto());

            }
            pnlGrilla.Visible = true;
            pnlFormulario.Visible = false;
            CargarGrilla();
        }

        protected void cmd_cancelar_Click(object sender, EventArgs e)
        {
            pnlFormulario.Visible = false;
            pnlGrilla.Visible = true;
            limpiarCampos();
            CargarGrilla();
        }




        private void Guardar()
        {


                if (hEstado.Value == "agregar")
                {
                    if (prodService.Insertar(MapFormToProducto()) == false)
                        Show("El producto no se pudo insertar porque ya existe ese codigo");
                }
                else if (hEstado.Value == "editar")
                {
                    prodService.modificar(MapFormToProducto());
                }
            
        }

        private void CargarGrilla()
        {
            bool Conbajas = false;
            if (chk_CampoBaja.Checked == true)
                Conbajas = true;

            List<ProductoReadOnly> productos = prodService.FindAllReadOnlies(Conbajas);
            grdProductos.DataSource = productos;
            string[] keys = new string[1];
            keys[0] = "ID";
            grdProductos.DataKeyNames = keys;
            grdProductos.DataBind();

        }

        private void cargarCombos()
        {
            ProductoService tprod = new ProductoService();

            cmbTela.DataSource = tprod.cargarComboTipoTela();
            cmbTela.DataValueField = "Id";
            cmbTela.DataTextField = "Nombre";
            cmbTela.DataBind();
            cmbTela.Items.Insert(0, " ");


            cmbProveedor.DataSource = tprod.cargarComboProveedor();
            cmbProveedor.DataValueField = "IdProveedor";
            cmbProveedor.DataTextField = "RazonSocial";
            cmbProveedor.DataBind();
            cmbProveedor.Items.Insert(0, " ");



        }

        private void MapProductoToForm(Producto p)
        {
            txtIdProducto.Text = p.Id.ToString();
            txtNombre.Text = p.Codigo.ToString();
            txtDescripcion.Text = p.Descripcion;
            txtFechaAlta.Text = p.FechaAlta.ToString();
            //txtFechaAlta.Text = p.FechaAlta.ToString("MM/dd/yyyy");
            txtPrecioCompra.Text = p.PrecioCosto.ToString();
            txtPrecioVenta.Text = p.PrecioVenta.ToString();
            txtStock.Text = p.Stock.ToString();
            if (p.StockMinimo != null)
                txtStockMinimo.Text = p.StockMinimo.ToString();
            cmbProveedor.SelectedValue = p.IdPoveedor.ToString();
            if (p.IdTipoTela != null)
                cmbTela.SelectedValue = p.IdTipoTela.ToString();
            rbl_tipoProd.SelectedValue = p.TipoProd.ToString();

        }

        private Producto MapFormToProducto()
        {
            Producto p = new Producto();
            if (txtIdProducto.Text != "")
                p.Id = int.Parse(txtIdProducto.Text);
            p.Codigo = txtNombre.Text;
            p.Descripcion = txtDescripcion.Text;
            p.FechaAlta = DateTime.Parse(txtFechaAlta.Text);
            p.PrecioCosto = double.Parse(txtPrecioCompra.Text);
            p.PrecioVenta = double.Parse(txtPrecioVenta.Text);
            p.Stock = int.Parse(txtStock.Text);
            if (txtStockMinimo.Text != "")
                p.StockMinimo = int.Parse(txtStockMinimo.Text);
            p.IdPoveedor = int.Parse(cmbProveedor.SelectedValue);
            if (cmbTela.Text != " ")
                p.IdTipoTela = int.Parse(cmbTela.SelectedValue);
            p.TipoProd = rbl_tipoProd.SelectedValue.ToString();
            p.DadoBaja = false;

            return p;

        }


        private static void Show(string message)
        {
            string cleanMessage = message.Replace("'", "\'");
            Page page = HttpContext.Current.CurrentHandler as Page;
            string script = string.Format("alert('{0}');", cleanMessage);
            if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
            {
                page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", script, true);
            }
        }

        protected void chk_CampoBaja_CheckedChanged(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void deshabilitarCampos()
        {
            txtNombre.Enabled = false;
            txtDescripcion.Enabled = false;
            txtFechaAlta.Enabled = false;
            txtPrecioCompra.Enabled = false;
            txtPrecioVenta.Enabled = false;
            txtStock.Enabled = false;
            txtStockMinimo.Enabled = false;
            cmbProveedor.Enabled = false;
            cmbTela.Enabled = false;
            rbl_tipoProd.Enabled = false;
            cmd_Guardar.Visible = false;
            cmd_ConfirmEliminar.Visible = false;
        }

        private void habilitarCampos()
        {
            txtDescripcion.Enabled = true;
            txtFechaAlta.Enabled = true;
            txtNombre.Enabled = true;
            txtPrecioCompra.Enabled = true;
            txtPrecioVenta.Enabled = true;
            txtStock.Enabled = true;
            txtStockMinimo.Enabled = true;
            cmbProveedor.Enabled = true;
            cmbTela.Enabled = true;
            rbl_tipoProd.Enabled = true;
            cmd_Guardar.Enabled = true;
            cmd_ConfirmEliminar.Visible = false;
            cmd_Guardar.Visible = true;
            cmd_cancelar.Visible = true;
            cmd_ConfirmEliminar.Visible = false;


        }

        private void limpiarCampos()
        {
            txtNombre.Text = "";
            txtStockMinimo.Text = "";
            txtStock.Text = "";
            txtPrecioVenta.Text = "";
            txtPrecioCompra.Text = "";
            txtIdProducto.Text = "";
            txtFechaAlta.Text = "";
            txtDescripcion.Text = "";
            cmbProveedor.SelectedIndex = -1;
            cmbTela.SelectedIndex = -1;
            cmbProveedor.SelectedIndex = -1;

        }

        protected void chk_CampoBaja_CheckedChanged1(object sender, EventArgs e)
        {
            CargarGrilla();

        }

        protected void grdProductos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdProductos.PageIndex = e.NewPageIndex;

            CargarGrilla();
        }
    }
}